home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 50
/
Aminet 50 (2002)(GTI - Schatztruhe)[!][Aug 2002].iso
/
Aminet
/
util
/
boot
/
ShellUpdate.lha
/
Documentation
/
Shell.ger
< prev
next >
Wrap
Text File
|
2002-01-12
|
12KB
|
293 lines
Kurzeinführung neue Features der V45 Shell:
Neue Umleitungsargumente: Die altbekannten Umleitungsargumente der
Shell >, >>, < und <> wurden erweitert und ausgebaut; damit beherrscht
die Shell nun die folgenden Umleitungsargumente:
>filename Umlenken der Ausgabe in eine Datei
>>filename Anhängen der Ausgabe an eine Datei, ggf. Neuerstellen
der Ausgabedatei
<filename Umlenken der Eingabe aus einer Datei in das Kommando
<>console Umlenken von Ein- und Ausgabe in die gleiche Datei.
Bei der Datei sollte es sich entweder um einen Konsolen-
treiber (CON:, RAW:, VNC:, AUX:) oder um NIL: handeln.
Gewöhnliche Dateien werden hier nicht akzeptiert.
*>filename Umlenken der Fehlerausgabe in eine Datei.
Leider unterstützen nur sehr wenige Kommandos das Aus-
geben von Fehlern in den Fehlerkanal, üblicherweise
werden Fehlermeldungen leider in den Ausgabekanal
geschrieben.
Dieses Umleitungsargument ersetzt auch die Konsole des
auszuführenden Kommandos, sollte es sich bei der Datei-
bezeichnung um einen Konsolentreiber handeln.
*>>filename Wie oben, nur wird die Fehlerausgabe an die gegebene
Datei angehängt.
*>< Umlenken der Fehlerausgabe in die gewöhnliche Ausgabe-
datei. Dies entspricht gewöhnlich auch der Voreistellung.
Ein Filenamenargument wird hier nicht benötigt.
<<endmarker Umlenken der Eingabedatei auf die Skriptdatei; der
Inhalt der Skriptdatei, in dem dieses Umlenkungsargument
steht, wird bis zur spezifizierten Endmarkierung der
Eingabestrom des Befehls.
Das letzte Umlenkungsargument bedarf noch weiterer Erklärung: Dieses
Umlenkungsargument findet typischerweise Verwendung in sogenannten
Skript- oder "Batch"-Dateien. Hierbei stehen die Daten, die den Eingabe-
strom des Kommandos formen sollen, direkt innerhalb des Skriptes.
Alle Zeilen bis zu der Zeile mit der gegebenen Endmarkierung werden
dann als Eingabestrom in den Befehl gefüttert, und die Ausführung
wird unterhalb der Endmarkierung fortgesetzt. Dies demonstriert das
folgende Skript:
ask Prompt "Bitte eine Zahl eingeben: " numeric TO a <<endmarker
42
endmarker
echo $a
Der "ask"-Befehl wartet auf die Eingabe einer Zahl auf seinem Ein-
gabestrom. Normalerweise ist dies die Konsole, aber aufgrund des
Umleitungsargumentes << kommen die Eingabedaten nun aus der Skript-
datei selbst. Die Zahl "42" unterhalb des "ask" Befehles bildet also
die Eingabe für "ask", und der "endmarker" terminiert diese Eingabe.
Die Ausführung des Skriptes wird dann mit dem "echo" Befehl fortgesetzt.
Die Endmarkierung ist dabei ein beliebig wählbarer Text, der nur zur
Erkennung des Endes der einzulesenden Daten dient. Er ist nicht selbst
Teil dieser Daten. Insbesondere wäre also
ask Prompt "Bitte eine Zahl eingeben: " numeric TO a <<43
42
43
echo $a
äquivalent zum obigen Skript.
Das Umlenken der Eingabe mittels "<<" funktioniert nicht im Zusammen-
hang mit dem "RUN" Befehl. Verwenden Sie stattdessen das &-Zeichen
(siehe unten) zum Starten von Befehlen im Hintergrund.
Starten von Befehlen: Die V45 Shell erlaubt es ferner, ein Programm
ähnlich wie durch "run" zu starten und dann sofort zur Shell zurück-
zukehren. Dazu plaziere man ein einzelnes, durch Leerzeichen vom
Rest der Kommandozeile separiertes "&"-Zeichen in die Befehlsargumente.
Das & ist dann nicht selbst Teil des Kommandos, sondern ändert die
Art der Befehlsausführung. Längerfristige Kommandos und größere Skripte
können so im Hintergrund ausgeführt werden, ohne dass die Arbeit in der
Shell anderweitig behindert wird. So startet etwa
search from SYS:#? all "hallo" quiet &
einen längerfristigen Suchvorgang nach dem Text "hallo" in allen Dateien
innerhalb der Systempartition, und kehrt sofort in die Konsole zurück.
Damit entspricht & fast, aber nicht ganz dem "run"-Kommando. Anders als
"run" erhalten mit "&" gestartete Programme allerdings auch einen gültigen
Eingabestrom und können so auf Benutzereingaben reagieren.
Im Zusammenhang mit den ViNCEd-Konsolenhandler nimmt & ebenso eine Job-
kontrolle vor. Das mittels "&" gestartete Kommando wird angehalten sobald
es versucht, eine Ausgabe oder Benutzereingabe zu tätigen. Man kann dann
mittels des ViNCEd-Skriptes "fg" dieses Kommando aktivieren und in den
Vordergrund legen. Beispielsweise druckt das Kommando "list &" folgende
Ausgaben auf den Schirm (Dateibezeichnungen und CLI-Nummern können von dem
hier gezeigten abweichen):
7.SCSI:> list &
[CLI 8] : list
7.SCSI:>
[CLI 8] : list suspended. [ViNCEd output]
7.SCSI:>
Die Shell im Vordergrund hat die CLI-Nummer 7, der List-Befehl bekommt
die CLI-Nummer 8, und wurde angehalten, da er auf der Konsole Ausgaben
vornehmen wollte. Mittels des Kommandos
7.SCSI:> fg 8
wird der List-Befehl, der wie gesagt die CLI-Nummer 8 erhielt, nun fort-
gesetzt.
Skript-Dateien mit beliebigen Kommandointerpreter: Ab V45 der Shell
können Skriptdateien auch an beliebige Kommandointerpreter weiter-
gereicht werden. Dazu muss einerseits das "s"-Bit der Datei gesetzt
sein, andererseits müssen die ersten beiden Zeichen einer Datei ent-
weder "#!" oder ";!" sein. Der folgende Text stellt dann den Pfad
zum Kommandointerpreter und weitere Argumente dar. Der Name des Skriptes
wird dann zwischen den Namen des Interpreters und die folgenden Argu-
mente eingefügt.
Das folgende Beispielskript startet etwa den Interpreter "type"
mittels des Argumentes "hex"
;! type hex
Dies wird in Hexadezimal ausgegeben.
Speichert man diesen Text unter dem Dateinamen "RAM:bla" und setzt
mittels
protect ram:Bla s add
das "s"-Bit dieses Skriptes, so startet die Eingabe von "RAM:bla"
den "type" Befehl mit den Argumenten "ram:bla hex" und gibt somit den
Inhalt der Datei selbst aus:
7.SCSI:> ram:bla
0000: 3B212074 79706520 6865780A 44696573 ;! type hex.Dies
0010: 20776972 6420696E 20486578 6164657A wird in Hexadez
0020: 696D616C 20617573 67656765 62656E2E imal ausgegeben.
0030: 0A .
Im Zusammenhang mit Skript-basierten Sprachen wie "perl" lassen sich
so komplette Skripte durch Eingabe des Skriptnamens starten.
Wie schon unter V40 startet ein Skript, das mit "/*" eingeleitet wird,
den Rexx-Befehlsinterpreter.
Ohne "/*" und "#!" oder ";!" wird ein Skript als Shell-Skript ver-
standen und mittels des "Execute"-Befehles interpretiert.
Anzeigen von Datentypen: Ist das "e"-Bit einer Datei nicht gesetzt,
handelt es sich hierbei um eine anzeigbare Datei und ist die Shell-
Variable "VIEWER" gesetzt, so wird beim Eingeben des Dateinamens das
mittels VIEWER gegebene Anzeigeprogramm gestartet. Typischerweise
sollte man etwa mittels
Setenv SAVE VIEWER MultiView
das Os-Programm "MultiView" als Anzeigeprogramm auswählen. Ist
dann das "e"-Bit der Datei "Shell.guide" gelöscht, so kann durch
Eingabe von
Shell.guide
der Inhalt dieser Datei angezeigt werden. Der Befehl, den die
Shell dann ausführt, entspricht
$VIEWER Shell.guide
bzw.
Multiview Shell.guide
Das H-Bit und residente Kommandos: Ist von einer ausführbaren Datei
sowohl das "p" als auch das "h"-Bit gesetzt, so wird dieser Befehl
bei seiner ersten Anwendung automatisch resident. Dies entspricht
der Funktion der V39 Shell, die aus Platzgründen in V40 abgeschaltet
werden musste.
Shell-Variablen: Die V45-Shell kann explizt erfragen, ob eine gegebene
Variable definiert wurde. Ist "var" der Name einer Variable, so
resultiert $?var in 1, falls die Variable gesetzt wurde, und 0 sonst.
$??var wird 1, wenn var eine globale Variable ist - dies sind Variablen,
die durch SetEnv erstellt werden - und ist ansonsten null.
Das umgekehrte Hochkomma: In Gegensatz zur V40-Shell können auf einer
Kommandozeile auch mehrere umgekehrte Hochkomma-Paare stehen. Die
mittels ` eingeschlossenen Befehle werden ausgeführt, und ihre Ausgabe
in die Kommandozeile anstelle des umgekehrten Hochkomma-Paares einge-
fügt. Dabei werden Zeilenvorschübe durch Leerzeichen ersetzt.
Im Gegensatz zur V40 Shell findet dabei keine Einschränkung der Kommando-
zeilenlänge statt. Die so erzeugten Kommandozeilen können prinzipbedingt
sehr lang werden; obwohl die Shell selbst nun keine Probleme mehr mit
langen Kommandos hat, können einige Befehle diese dennoch nicht korrekt
abarbeiten.
Ferner darf nun auch das auszuführende Kommando selbst durch `` generiert
werden. So zeigt etwa
`echo list`
den Inhalt der augenblicklichen Directory an, indem der "list"-Befehl
aus der Ausgabe von "echo" generiert wird.
Rekursive Aliase: Enthält der Inhalt eines mittels "alias" erzeugten
Befehles erneut selbst ein alias, so wird dieses Alias ebenso aufge-
löst. Um endlose Schleifen zu verhindern, löst die Shell allerdings
innerhalb jeder Kommandozeile ein Alias nur maximal einmal auf. In
der V40 Shell fand keine rekursive Auflösung von Aliasen statt.
Neue Kommandos: Die V45 Shell verfügt über drei neue eingebaute
Kommandos namens "PushCD", "SwapCD" and "PopCD". PushCD legt das
augenblickliche Verzeichnis in einen Stapelspeicher und wechselt
wie "CD" in das angegebene Verzeichnis. PopCD entnimmt die oberste
Ebene dieses Stapelspeichers und setzt das aktuelle Verzeichnis
auf das so gefundene Verzeichnis. Mittels "PushCD" merkt sich somit
die Shell das jeweils letzte Verzeichnis, das mit "PopCD" dann
wiederhergestellt werden kann. "SwapCD" vertauscht die oberste,
oder eine anzugebene Ebene dieses Verzeichnisstapels mit dem
aktuellen Verzeichnis. Lesen Sie bitte für genauere Angaben die
Dateien "PushCD", "PopCD" und "SwapCD", die auch weitere Argumente
dieser nützlichen Befehle besprechen.
Erweiterte Kommandos: Einige eingebaute Kommandos wurden erweitert
und ergänzt.
PATH erhielt eine neue Option "HEAD", mit der ein weitere Suchpfad
an den Anfang der Liste der Pfade eingefügt wird. Ohne "HEAD" wird
wie bisher ein weiterer Pfad an das Ende der Liste angefügt. Damit
erhält ein mittels "HEAD" eingefügtes Verzeichnis eine höhere Prio-
rität als bereits vorhandene Suchpfade.
SetENV und UnSetENV bekamen eine neue Option "SAVE" mittels der
die Änderungen der Umgebungsvariablen permanent abgespeichert
werden.
ASK kann jetzt nicht nur Ja/Nein Eingaben beantworten, sondern kann
auch Zahlen oder ganze Texte als Eingabe erwarten. Diese Eingabe
erscheint dann entweder im Ausgabepfad von "ASK", oder wird mittels
des "TO"-Argumentes in eine anzugebene Variable geschrieben.
ASK Prompt "Bitte eine Zahl eingeben: " numeric to a
bittet um die Eingabe einer Zahl,
ASK Prompt "Bitte einen Text eingeben: " string to a
bittet um die Eingabe eines Textes. In beiden Fällen wird
die Eingabe in der Shell-Variablen $a abgelegt.
Weitere kleinere Änderungen und Fehlerbereinigungen wurden an
"Run", "Resident", "Set", "unSet", "Alias" und "unAlias" vorgenommen.
Weitere Kleinigkeiten:
- Das "implizite" Wechseln des aktuellen Verzeichnisses funktionierte
in der V40 Shell nicht korrekt, wenn der Verzeichnisname in Anführungs-
stiche eingeschlossen war. Dieser Fehler wurde in V45 behoben. So
wechselt etwa der Befehl
"RAM Disk:"
korrekt in die RAM-Disk.
- Das Verhalten des Escape-Zeichens * wurde an diversen Stellen
repariert.
- Werden Variablen oder ``-Sequenzen innerhalb von Anführungszeichen
aufgelöst, so entfernt die Shell die äußeren Anführungszeichen.
Dieses Verhalten kann mittels "set keepdoublequotes on" ausge-
schaltet werden,
- Stack-Erweiterung von Shell-Befehlen: Findet die Shell innerhalb einer
Befehlsdatei den Text "$STACK:" gefolgt von einer Dezimalzahl und einem
Zeilenvorschub, so wird diese Zahl als minimale Größe des Stapelspeichers
für den Befehl verstanden und der Stapelspeicher ggf. auf diese Größe
erweitert.
Genaueres zu weiteren Änderungen zur Kommandosyntax der Shell findet
sich in der englischsprachigen Datei "Shell".